package com.songlanyun.common.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonValue;
import com.songlanyun.common.drive.IntegerEnum;

import java.util.Objects;


/**
 * 支付 相关枚举
 */
public class PayConstant {

    /**
     * TODO 存数据库不能用此枚举
     * 支付方式
     * 11: 支付宝电脑网站支付
     * 12: 支付宝手机网站支付
     * 13: 支付宝 APP 支付
     * <p>
     * 21: 微信 NATIVE 支付(二维码支付)
     * 22: 微信 JSAPI 支付
     * 23: 微信 H5 支付
     * 24: 微信 APP 支付
     * 25: 微信 小程序 支付
     */
    @JsonFormat(shape = JsonFormat.Shape.OBJECT)
    public static enum PayType implements IntegerEnum<Integer> {
        BALANCE(10, "余额支付"),
        ALIPAY_TRADE_PAGE_PAY(11, "支付宝电脑网站支付 alipay.trade.page.pay"),
        ALIPAY_TRADE_WAP_PAY(12, "支付宝手机网站支付 alipay.trade.wap.pay）"),
        ALIPAY_TRADE_APP_PAY(13, "支付宝 APP 支付 alipay.trade.app.pay）"),

        WECHAT_TRADE_NATIVE_PAY(21, "微信 NATIVE 支付(二维码支付) WeChat"),
        WECHAT_TRADE_JSAPI_PAY(22, "微信 JSAPI 支付"),
        WECHAT_TRADE_H5_PAY(23, "微信 H5 支付"),
        WECHAT_TRADE_APP_PAY(24, "微信 APP 支付"),
        WECHAT_TRADE_APPLET_PAY(25, "微信 小程序 支付"),

        ORDER_PAY_TYPE_ALIPAY_HUIFU_APP(31, "支付宝(汇付)APP 支付"),

        ORDER_PAY_TYPE_ALIPAY_HSQ_APP(41, "支付宝（慧收钱）APP支付"),
        ORDER_PAY_TYPE_WX_HSQ_APP(42, "微信（慧收钱）APP支付"),
        ORDER_PAY_TYPE_ALIPAY_HSQ_MAIN(43, "支付宝（慧收钱）APP支付"),
        ORDER_PAY_TYPE_WX_HSQ_MAIN(44, "微信（慧收钱）APP支付"),

        ORDER_PAY_TYPE_ADAPAY_KJ_APP(51, "快捷支付"),
        QUICK_PAY_ALIPAY(52, "快钱支付宝支付"),
        QUICK_PAY_AWE_CHAT(53, "快钱微信支付"),
        QUICK_PAY(18, "快钱支付"),
        QUICK_PAY_BANK(20, "快钱快捷支付"),
        ;

        @EnumValue
        @JsonValue
        private Integer code;

        private String msg;

        PayType(Integer code, String msg) {
            this.code = code;
            this.msg = msg;
        }

        public void setCode(Integer code) {
            this.code = code;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }

        @Override
        public Integer getCode() {
            return code;
        }

        @JsonCreator
        public static PayConstant.PayType getByCode(int code) {
            for (PayConstant.PayType value : PayConstant.PayType.values()) {
                if (Objects.equals(code, value.getCode())) {
                    return value;
                }
            }
            return null;
        }
    }
}
